﻿'********************************************************************************
'*
'*      ダイ選外観工程　フォーム
'*
'*      File Name : frmStartCompleteDicCheck.vb
'*      Title     : ダイ選外観工程着工/完了画面
'*      機能    　：ダイ選外観工程
'*
'********************************************************************************
'----------------------------------<<修正履歴>>----------------------------------
'ﾊﾞｰｼﾞｮﾝ   日付       作業者        ｺﾒﾝﾄ
'--------- ---------- ------------ ----------------------------------------------
' V1.0.0   2016/09/14 S.Yu         新規作成
' V2.0.0   2017/05/18 horaguchi    蘇州対応
' V3.0.0   2017/05/18 m.Abe        北京対応
'********************************************************************************

Imports System.Text

Public Class frmStartCompleteDicCheck

    Private preRackNo As String = ""

    '>>2018/1/31 佐川 キャリア交換対応
    '実行モード
    '0:表示 1:着工 2:製造完成 3:計上完成
    Private execMode As String = VIEW
    '<<2018/1/31 佐川 キャリア交換対応

    'タブコントロールの設定
    Public Overrides Sub SetTabControl()
        TabPageEqp.Enabled = False
    End Sub

    '照合結果設定
    Public Overrides Sub SetPassScore()
        PASS_SCORE = 1
        ReDim m_iScore(PASS_SCORE - 1)
        m_iScore = {1}
    End Sub

    '照合結果クリア
    Public Overrides Sub InitualizeCollData()
        m_iScore = {0, 1}
    End Sub

    'イベント設定
    Public Overrides Sub SetHandler()

        'ウェハケースNo(着工後)
        AddHandler txt0203.KeyPress, AddressOf txtData_KeyPress
        '        AddHandler txt0203.LostFocus, AddressOf WaferCaseTxtData_LostFocus
        AddHandler btnBarCode2.Click, AddressOf WaferCaseNo_Click

    End Sub

    'Lot Noでデータベースからデータを取得する
    Public Overrides Sub GetDataByIcTag()
        '初期化
        InputDataClear()

        'ICタグのデータで画面を設定する
        SetFromTag()
        setGridViewLot()

        If String.IsNullOrEmpty(IcTag.szUID) Then
            IcTag = LastTag
        End If

        '条件テーブル取得
        setJyokenData()

        ''製造条件の設定
        'For Each dr In dtJyokenData.Rows
        '    If dr("KOMOKUNAME").Equals(lb20100.Tag) Then
        '        lbl0203.Text = dr("KOMOKUDATA")
        '    End If
        'Next

        '>>2018/1/31 佐川 キャリア交換対応
        ''前工程情報取得、設定
        txt0203.Text = IcTag.container1
        'For Each drPreDetail In dtPreDetailData.Rows
        '    If drPreDetail("MNF_CND_TAG").Equals(lbl0200.Tag) Then
        '        'ウェハケースNoの製造条件
        '        lbl0203.Text = drPreDetail("ACTUAL_MODEL")
        '        txt0203.Text = drPreDetail("ACTUAL_MODEL")
        '        preRackNo = drPreDetail("ACTUAL_MODEL")
        '    End If
        'Next
        '<<2018/1/31 佐川 キャリア交換対応

        '工程明細テーブル取得
        setDetailData()

        '>>2018/2/13 大賀 サンプル数量対応
        If IcTag.Status = TagProcessStatus.Ready Then
            lblSampleText.Text = m_cSamplingDef.getSamplingMessage(IcTag.szProcsCD)
        Else
            Dim getData = dtDetailData.AsEnumerable().FirstOrDefault(Function(x) lblSampleTitle.Tag.Equals(x("MNF_CND_TAG")))
            If getData IsNot Nothing Then
                lblSampleText.Text = getData("ACTUAL_MODEL")
            End If
        End If
        '<<2018/2/13 大賀 サンプル数量対応

        '工程ヘッダーテーブル取得
        getHeadData()

        'ヘッダーの設定
        With m_dtMat
            If .Rows.Count > 0 Then
                '着完情報
                DisplayDate()
            Else
                If m_dtMat.Columns.Count > 0 Then
                    .Rows.Add()
                Else
                    .Columns.Add("BEGIN_TIME")
                    .Rows.Add()
                End If
            End If
        End With
        Call RefleshLotBadData()
    End Sub

    '初期化、背景色の設定
    Public Sub InputDataClear()

        '>>2018/1/31 佐川 キャリア交換対応
        execMode = VIEW
        '<<2018/1/31 佐川 キャリア交換対応

        'ロットタブの初期化
        clearActualModel()

        'ウェハケースNo(着工後)
        txt0203.Text = String.Empty
        txt0203.BackColor = NORMAL_INIT_COLOR
        lbl0203.BackColor = NORMAL_INIT_COLOR
        txt0203.Enabled = False

        '開始作業者No
        txtOptNoStt.Text = String.Empty
        '終了作業者No
        txtOptNoEnd.Text = String.Empty

        dgvLotBatData.Columns("colLotNo").DataPropertyName = ""
        dgvLotBatData.Columns("colBadCnt").DataPropertyName = ""
        dgvLotBatData.DataSource = Nothing
        btnLotBadUp.Enabled = False
        btnLotBadDown.Enabled = False

        '>>2018/2/15 大賀 サンプル数量対応 計上完成後のクリア漏れ
        lblSampleText.Text = String.Empty
        '<<2018/2/15 大賀 サンプル数量対応 計上完成後のクリア漏れ

    End Sub

    '画面データ保存（着工時）
    Public Overrides Function SaveEquipMat(ByRef szBeginTime As DateTime) As Boolean
        '>>2018/1/31 佐川 キャリア交換対応
        execMode = BEGIN
        '<<2018/1/31 佐川 キャリア交換対応
        If saveDetail(BEGIN) < 0 Then
            Return False
        Else
            Return True
        End If
    End Function

    '画面データ保存（製造完成）
    Public Overrides Function SaveCompleteInfo(Optional ByVal status As ProcessStatus = ProcessStatus.ManufComplete) As Integer
        '>>2018/1/31 佐川 キャリア交換対応
        execMode = COMPLETE
        '<<2018/1/31 佐川 キャリア交換対応
        dtDBUpd.Clear()
        Return saveDetail(COMPLETE)
    End Function

    '画面データ保存（計上完成）
    Public Overrides Function SaveTotalInfo() As Integer
        '>>2018/1/31 佐川 キャリア交換対応
        execMode = TOTAL
        '<<2018/1/31 佐川 キャリア交換対応
        dtDBUpd.Clear()
        Return saveDetail(TOTAL)
    End Function

    '工程明細テーブル更新処理
    Private Function saveDetail(ByVal type As String) As Integer
        setLotData()
        Dim rowsCnt As Integer = dtDBUpd.Rows.Count

        If type <> BEGIN Then
            'ウェハケースNo(着工後)
            dtDBUpd.Rows.Add()
            dtDBUpd.Rows(rowsCnt)("MNF_CND_TAG") = lbl0200.Tag
            dtDBUpd.Rows(rowsCnt)("MNF_CND_TAG_FLG") = 0
            dtDBUpd.Rows(rowsCnt)("SEQ") = 1
            '            dtDBUpd.Rows(rowsCnt)("MNF_CONDITION") = lbl0202.Text
            dtDBUpd.Rows(rowsCnt)("ACTUAL_MODEL") = txt0203.Text
            rowsCnt = rowsCnt + 1
            Dim dtLotBadData As DataTable = m_cLotBadDatat.GetLotBadData(g_EQUIP_NO, txtDiffLot.Text) 'UPD 苗 2018/1/19 装置No.の対応
            Dim iLotBadDataCnt As Integer = dtLotBadData.Rows.Count
            Dim iLoop1 As Integer

            If iLotBadDataCnt > 0 Then
                For iLoop1 = 0 To iLotBadDataCnt - 1
                    dtDBUpd.Rows.Add()
                    dtDBUpd.Rows(rowsCnt)("MNF_CND_TAG") = "LOT BAD DATA"
                    dtDBUpd.Rows(rowsCnt)("MNF_CND_TAG_FLG") = 0
                    dtDBUpd.Rows(rowsCnt)("SEQ") = iLoop1 + 1
                    dtDBUpd.Rows(rowsCnt)("MNF_CONDITION") = dtLotBadData(iLoop1)("LOT_NO").ToString
                    dtDBUpd.Rows(rowsCnt)("ACTUAL_MODEL") = dtLotBadData(iLoop1)("LOT_BAD_CNT").ToString
                    rowsCnt = rowsCnt + 1
                Next
            End If
            Call m_cLotBadDatat.DeleteLotBadData3(txtDiffLot.Text, g_EQUIP_NO, lotNo) 'UPD 苗 2018/1/19 装置No.の対応
        End If

        '>>2018/2/13 大賀 サンプル数量対応
        'サンプル数量
        dtDBUpd.Rows.Add()
        dtDBUpd.Rows(rowsCnt)("MNF_CND_TAG") = lblSampleTitle.Tag
        dtDBUpd.Rows(rowsCnt)("MNF_CND_TAG_FLG") = CND_TAG_FLG_ELSE
        dtDBUpd.Rows(rowsCnt)("SEQ") = 1
        dtDBUpd.Rows(rowsCnt)("ACTUAL_MODEL") = lblSampleText.Text
        rowsCnt += 1
        '<<2018/2/13 大賀 サンプル数量対応

        Return m_cEquipMat.SaveDetail(lotNo, IcTag.szProcsCD, type,
                                      m_szTable, dtDBUpd, m_dtHeader,
                                      m_cIdohyo.EquipInfo.szEquipNo, serverTime)
    End Function

    '計上完成時チェック処理
    Public Overrides Function EndCheck() As Boolean
        'Dim CheckFlag As Boolean
        Dim title As String = lbl0200.Text.Replace(Environment.NewLine, "")

        'ウェハケースNoの空白チェック
        If Not checkBlank(txt0203.Text, title) Then
            txt0203.BackColor = ERROR_INIT_COLOR
            lbl0203.BackColor = ERROR_INIT_COLOR
            Return False
        End If

        '>>20180313 大賀 搬送容器桁数チェックを共通化
        ' ウェハケースNoの桁数チェック
        If Not isCheckCaseLength(txt0203, WAFER_CASE_NO_LENGTH, lbl0203) Then
            Return False
        End If
        '<<20180313 大賀 搬送容器桁数チェックを共通化

        txt0203.BackColor = ENTERED_INIT_COLOR
        lbl0203.BackColor = ENTERED_INIT_COLOR

        '>>20180302 大賀 GroupKey入力時ウェハ枚数入力
        If Not CheckInputWaferNum() Then
            Return False
        End If
        '<<20180302 大賀 GroupKey入力時ウェハ枚数入力
        Return True
    End Function

    Public Overrides Sub ConfScreenItem()
        If txtLotNo.TextLength > 0 Then
            If IcTag.Status = TagProcessStatus.Processing Then
                '着工中
                btnBarCode2.Enabled = True
                txt0203.BackColor = BARCODE_INIT_COLOR
                lbl0203.BackColor = BARCODE_INIT_COLOR
            End If
        End If
    End Sub

    Public Overrides Sub AfterRefleshLotBadData()
        Dim szLotTmp As String

        '        Dim i As Integer = 0
        ' ワークテーブルから表示項目を取得

        If m_szPreProcLotType = "0" Then
            szLotTmp = txtDiffLot.Text
        Else
            szLotTmp = txtLotNo.Text
        End If

        '        Dim dtLotBatData As DataTable = m_cLotBadDatat.GetLotSizeData(g_EQUIP_NO, szLotTmp, m_szPreProcLotType) 'UPD 苗 2018/1/19 装置No.の対応
        Dim dtLotBatData As DataTable = m_cLotBadDatat.GetLotSizeData(g_CURRENT_EQUIP_ID, szLotTmp, m_szPreProcLotType) 'UPD 安部 2018/1/24 装置No.の対応修正によるミスを再修正

        If dgvLotBatData.DataSource IsNot Nothing Then
            dgvLotBatData.Columns("colLotNo").DataPropertyName = ""
            dgvLotBatData.Columns("colBadCnt").DataPropertyName = ""
        End If

        ' 組立ロット数分，Gridを生成
        If dtLotBatData.Rows.Count <> 0 Then
            dgvLotBatData.DataSource = dtLotBatData
            dgvLotBatData.Columns("colLotNo").DataPropertyName = "LOT_NO"
            dgvLotBatData.Columns("colBadCnt").DataPropertyName = "LOT_BAD_CNT"
        End If

        btnLotBadUp.Enabled = False
        btnLotBadDown.Enabled = True


    End Sub

    Private Sub btnLotBadUp_Click(sender As Object, e As EventArgs) Handles btnLotBadUp.Click
        Dim currentRow As Integer
        currentRow = dgvLotBatData.CurrentCell.RowIndex

        If currentRow = 0 Then
            Exit Sub
        End If

        ' 現在行を一行上に移動する
        dgvLotBatData.CurrentCell = dgvLotBatData(0, currentRow - 1)

        btnLotBadDown.Enabled = True

        currentRow = dgvLotBatData.CurrentCell.RowIndex
        ' 移動後現在行が先頭行の場合，UPボタンを非活性化
        If currentRow = 0 Then
            btnLotBadUp.Enabled = False
        End If

    End Sub

    Private Sub btnLotBadDown_Click(sender As Object, e As EventArgs) Handles btnLotBadDown.Click
        Dim currentRow As Integer
        Dim maxRowCount As Integer
        currentRow = dgvLotBatData.CurrentCell.RowIndex

        maxRowCount = dgvLotBatData.DataSource.Rows.Count - 1
        If currentRow = maxRowCount Then
            Exit Sub
        End If

        ' 現在行を一行下に移動する
        dgvLotBatData.CurrentCell = dgvLotBatData(0, currentRow + 1)

        btnLotBadUp.Enabled = True

        currentRow = dgvLotBatData.CurrentCell.RowIndex
        ' 移動後現在行が最終行の場合，DOWNボタンを非活性化
        If currentRow = maxRowCount Then
            btnLotBadDown.Enabled = False
        End If

    End Sub


    Private Sub txt0203_LostFocus(sender As Object, e As EventArgs) Handles txt0203.LostFocus
        Dim idx As Integer = CInt(txt0203.Name.Substring(3, 2)) - 1
        Dim title As String = lbl0200.Text.Replace(Environment.NewLine, "")

        '空白チェック
        If Not checkBlank(txt0203.Text, title) Then
            txt0203.BackColor = ERROR_INIT_COLOR
            lbl0203.BackColor = ERROR_INIT_COLOR
            If IcTag.Status = TagProcessStatus.Ready Then
                m_iScore(idx) = 1
            End If
            Exit Sub
        End If

        '前工程チェック
        If Not preRackNo.Equals("") AndAlso Not preRackNo.Equals(txt0203.Text) Then
            txt0203.BackColor = ERROR_INIT_COLOR
            lbl0203.BackColor = ERROR_INIT_COLOR
            If IcTag.Status = TagProcessStatus.Ready Then
                m_iScore(idx) = 1
            End If
            MsgBox(getMsgStr("MSG00052", title))
            Exit Sub
        End If

        '>>20180313 大賀 搬送容器桁数チェックを共通化
        ' ウェハケースNoの桁数チェック
        If Not isCheckCaseLength(txt0203, WAFER_CASE_NO_LENGTH, lbl0203) Then
            Exit Sub
        End If

        txt0203.BackColor = ENTERED_INIT_COLOR
        lbl0203.BackColor = ENTERED_INIT_COLOR
        '<<20180313 大賀 搬送容器桁数チェックを共通化

        txt0203.Enabled = False
    End Sub

    '計上完成正常時の画面初期化
    Protected Overrides Sub initializForm()
        MyBase.initializForm()
        InputDataClear()
        ConfScreenItem()
    End Sub

    'ラックNoタブキー対応
    Private Sub txt0203_PreviewKeyDown(ByVal sender As Object, ByVal e As PreviewKeyDownEventArgs) Handles txt0203.PreviewKeyDown
        'タブキーが押下された場合は、改行コードと見なし処理を行う
        If e.KeyCode = Keys.Tab Then
            e.IsInputKey = True
            txtData_KeyPress(sender, New KeyPressEventArgs(vbCr))
        End If
    End Sub

    '>>2018/1/31 佐川 キャリア交換対応
    'IcTag保存内容設定
    Protected Overrides Sub icTagDataSet()
        '製造完成、計上完成時は画面入力値の値を設定する。
        If execMode.Equals(COMPLETE) Or execMode.Equals(TOTAL) Then
            IcTag.container1 = txt0203.Text
            IcTag.container2 = String.Empty
            IcTag.container3 = String.Empty
            IcTag.container4 = String.Empty
            IcTag.container5 = String.Empty
        Else
            '初期値をそのまま保存するため、変更しない。
        End If
    End Sub
    '<<2018/1/31 佐川 キャリア交換対応

    ' >> 20180307 大賀 作業者入力確定時に次の入力にフォーカスを移動する
    ''' <summary>
    ''' 作業者入力後のフォーカスを各画面で設定する
    ''' 各画面でオーバーライドされない場合はTabIndex順に移動する
    ''' </summary>
    ''' <param name="inputType">作業者入力タイプ</param>
    ''' <param name="nowControl">対象コントロール</param>
    Protected Overrides Sub setNextFocus(ByVal inputType As OPERATER_INPUT_TYPE, ByVal nowControl As Control)
        If m_ProcessStatus <> ProcessStatus.Ready Then  ' ロット未入力の場合は処理しない
            If IcTag.Status = TagProcessStatus.Ready Then   ' 未着工
            ElseIf IcTag.Status = TagProcessStatus.Processing Then  ' 着工中
                If inputType = OPERATER_INPUT_TYPE.END_OPE Then
                    tabBase.SelectedTab = TabPageSp ' タブの移動
                    If String.IsNullOrEmpty(txt0203.Text) Then  ' 未入力の場合に入力可能にする
                        btnBarCode2.PerformClick()  ' バーコード入力ボタンを押す
                        Exit Sub
                    End If
                End If
            ElseIf IcTag.Status = TagProcessStatus.ManufComplete Then ' 製造完成

            End If
        End If
        ' 各画面個別のフォーカスに移動しない場合は次のTabIndexに移動
        SelectNextControl(nowControl, True, True, True, True)
    End Sub
    ' << 20180307 大賀 作業者入力確定時に次の入力にフォーカスを移動する
    Public Overrides Sub updateRackInfo()
        Dim rackNo As New ArrayList
        Dim dbLot As New clsDbLotDefect
        If txt0203.Text <> "" Then
            rackNo.Add(txt0203.Text)
        End If

        dbLot.DelInsRackInfo(IcTag.szDifLotNo, rackNo)
    End Sub

    Overrides Sub setProcessingLot()
        Dim InProcLot As String
        Dim waferLotDT As DataTable
        InProcLot = getProcessingLot()
        If InProcLot <> "" Then

            waferLotDT = m_cData.GetWbLotData(InProcLot)
            If IsNothing(waferLotDT) = False AndAlso waferLotDT.Rows.Count > 0 Then
                txtDiffLot.Text = waferLotDT(0)("WAFER_LOTNO")
                txtDiffLot_KeyPress(txtDiffLot, New KeyPressEventArgs(vbCr))
            End If

        End If
    End Sub
End Class
